package cn.mdmm.service.type;

import java.util.List;
import java.util.Map;

import org.springframework.remoting.service.annotation.RemoteService;

import cn.mdmm.entity.type.TypeInfoModel;
import cn.mdmm.entity.type.dto.TypeTree;
import cn.mdmm.entity.type.request.TypeRequest;
import cn.modoumama.common.response.Response;
import cn.modoumama.service.base.BaseService;

/**
 * TypeInfo业务接口定义<br>
 * 类描述：新闻类别业务接口<br>
 * 类生产方式：工具自动生成代码<br>
 * 创建人：dengqiang<br>
 * 创建时间：2017-06-04 20:04:27<br>
 * 修改人： <br>
 * 修改时间：<br>
 * 修改备注：<br>
 * 
 * @version V1.0
 */

@RemoteService
public interface TypeInfoService extends BaseService<TypeInfoModel, Integer> {

	// ------------------请在此添加自定义方法（开始）------------------
	/**
	 * 初始化加载所有类型
	 */
	public void init();

	/**
	 * 获取树结构
	 * 
	 * @param id 类型的id
	 * @param expanded 是否展开菜单
	 * @param hideDisableMenus 是否隐藏无效的菜单（被禁用的）
	 * @return
	 */
	public List<TypeTree> getTypeTree(Integer id, boolean expanded, boolean hideDisableMenus);

	/**
	 * 获取单个类型
	 * 
	 * @param id
	 * @return
	 */
	public TypeInfoModel getTypeById(Integer id);
	
	/**
	 * 获取单个类型
	 * 
	 * @param englishName
	 * @return
	 */
	public TypeInfoModel getTypeByEnglishName(String englishName);

	/**
	 * 获取一个类型的子类型（递归所有的后代类型）
	 * 
	 * @param id
	 * @return
	 */
	public List<TypeInfoModel> getChildrenTypeById(Integer id);

	/**
	 * 获取一个类型的子类型（直接子类型，不在深层递归）
	 * 
	 * @param id
	 * @return
	 */
	public List<TypeInfoModel> getOnlyChildrenTypeById(Integer id);
	
	/**
	 * 获取一个类下的所有子孙类（包含自身）
	 * 
	 * @param englishName
	 * @return
	 */
	public Map<String, String> getAllTypeToMap(String englishName);
	
	/**
	 * 获取一个类下的所有子孙类（不包含自身）
	 * 
	 * @param englishName
	 * @return
	 */
	public Map<String, String> getAllChildrenTypeToMap(String englishName);
	
	/**
	 * 获取typeID 
	 * @param englishName 顶级类型的英文名
	 * @param id		  子类型的id
	 * @return   
	 * 创建人：邓强   <br>
	 * 创建时间：2017年11月8日 上午9:33:50    <br>
	 */
	public Integer getTypeId(String englishName,Integer id);

	/**
	 * 获取一个类下的所有子孙类（包含自身）
	 * 
	 * @param id
	 * @return
	 */
	public Map<String, String> getAllTypeToMap(Integer id);

	/**
	 * 获取一个类下的所有子孙类
	 * 
	 * @param id
	 * @return
	 */
	public Map<String, String> getAllChildrenTypeToMap(Integer id);

	/**
	 * 获取一个类下的所有子孙类
	 * 
	 * @param id
	 * @return
	 */
	public Response getAllChildrenType(TypeRequest requset);

	// ------------------请在此添加自定义方法（结束）------------------

}
